package org.mm4juser.service;

import org.mm4juser.entity.DTO.*;
import org.mm4juser.entity.User;
import org.springframework.http.ResponseEntity;

import java.io.IOException;

public interface UserService {
	
	ResponseEntity<?> loadUser(String email);
	
	/**
	 * 登录方法
	 *
	 * @param loginDTO 登录数据传输对象，包含用户登录所需的信息
	 *
	 * @return LoginDTO 返回登录后的数据传输对象，可能包含用户信息、token等
	 */
	LoginDTO login(
		LoginDTO loginDTO
		// 登录数据传输对象参数
	);
	
	/**
	 * 用户注册（用户名、邮箱、密码）
	 *
	 * @param user 用户实体
	 *
	 * @return 注册成功\注册失败，服务器出错\注册失败，邮箱已占用
	 */
	ResponseEntity<?> register(User user);
	
	/**
	 * 退出登录
	 *
	 * @param user 用户实体
	 */
	ResponseEntity<?> exit(User user);
	
	/**
	 * 忘记&修改密码
	 *
	 * @param pwdChangeDTO DTO对象（邮箱、旧密码、新密码）
	 *
	 * @return 用户不存在、修改成功、旧密码错误
	 */
	ResponseEntity<?> forgetOrChangePwd(PwdChangeDTO pwdChangeDTO);
	
	/**
	 * 修改用户主要属性
	 *
	 * @param mainInfoChangeDTO DTO对象（User、新邮箱、新用户名）
	 *
	 * @return 该邮箱已被占用、修改成功、资料未修改
	 */
	ResponseEntity<?> changeMainInfo(MainInfoChangeDTO mainInfoChangeDTO);
	
	/**
	 * 修改用户次要属性
	 *
	 * @param secondInfoChangeDTO DTO对象（User、新个签、新性别、新生日）
	 *
	 * @return 资料未修改、修改成功
	 */
	ResponseEntity<?> changeSecondInfo(SecondInfoChangeDTO secondInfoChangeDTO);
	
	/**
	 * 头像上传
	 *
	 * @param avatarChangeDTO DTO对象（User、新头像）
	 *
	 * @return 上传成功、上传失败
	 */
	ResponseEntity<?> changeAvatar(AvatarChangeDTO avatarChangeDTO) throws IOException;
}
